Análise Exploratória - MARVEL VS DC

PARTE A

Motivação do Projeto

O projeto possui como objetivo comparar os personagens listados, bem como suas editoras (Marvel Comics e Dc Comics). Dessa forma, a curiosidade de colocar lado a lado os universos ficticios totalmente diferentes e ao mesmo tempo, com uma certa rivalidade, orientou a tomada de decisão. Assim, no final do trabalho, será realizada uma batalha mortal entre os personagens de cada universo com fundamentação em dados que irão definir um vencedor nessa guerra!

Hipótese

A peça gráfica visa sanar a seguinte questão: “Diante do universo das HQ’s, em uma batalha mortal entre DC Comics e Marvel Comics, quem sai vitorioso?”

Banco de dados

O site https://www.superherodb.com/ é um banco de dados online que contém informações detalhadas sobre super-heróis e supervilões de várias editoras de histórias em quadrinhos, como Marvel Comics, DC Comics, Dark Horse Comics, entre outras.

O Superhero Database (SuperheroDB) é uma fonte abrangente de informações sobre personagens fictícios, incluindo seus nomes, biografias, habilidades, poderes, estatísticas, histórico de publicação e muito mais. O site permite que os fãs de super-heróis pesquisem e explorem uma ampla gama de personagens, além de fornecer comparações de poderes, estatísticas e rankings dos personagens mais populares.

Dessa forma, utilizaremos ele como parâmetro para obtenção dos dados necessários do nosso trabalho. Especificamente, trabalharemos com a editora Marvel Comics e DC Comics.

Os aquivos csv’s do projeto podem ser encontrados em:
Link dos DataSets: https://github.com/KaikyBraga/DC-Comics-vs-Marvel

Bibliotecas necessárias

Para realização do projeto, utilizaremos as seguintes bibliotecas:

library(ggplot2) 
library(plyr) 
library(dplyr) 
library(gridExtra)
library(rmarkdown)
library(utf8)
Sys.setlocale("LC_ALL", "pt_br.utf-8") 
## [1] "LC_COLLATE=pt_br.utf-8;LC_CTYPE=pt_br.utf-8;LC_MONETARY=pt_br.utf-8;LC_NUMERIC=C;LC_TIME=pt_br.utf-8"

Obtenção de csv’s

Os dados são uma composição de três DataSets, são eles: informações sobre os personagens, super poderes de cada indivíduo e pontuação de cada atributo dos personagens (Força, Velocidade, Inteligência, Durabilidade, Poder e Combate). Em especial, na primeira linha de código, o argumento na.strings = c("-", "-99") indica que os valores "-" e "-99" nos dados devem ser tratados como NA (dados faltantes), bem como fizemos na última linha de código.

info_personagens <- read.csv("datasets/heroesInformation.csv", na.strings = c("-", "-99")) 
info_poderes <- read.csv("datasets/superHeroPowers.csv") 
info_atributos <- read.csv("datasets/charactersStats.csv", na.strings = "")

Renomeando e criando Segmentação

  • Renomeamos a coluna name de info_personagens para Name: colnames(info_personagens)[colnames(info_personagens) == "name"] <- "Name"
  • Fizemos uma segmentação dos dados de info_personagens, em que selecionamos apenas as editoras Marvel Comics e DC Comics: marvelDcInfo <- info_personagens[(info_personagens$Publisher == "Marvel Comics" | info_personagens$Publisher == "DC Comics"), ]
colnames(info_personagens)[colnames(info_personagens) == "name"] <- "Name" 
marvelDcInfo <- info_personagens[(info_personagens$Publisher == "Marvel Comics" |   info_personagens$Publisher == "DC Comics"), ]

Filtração de dados

  • Nesse trecho, selecionamos apenas as linhas que não possuem nomes repetidos: marvelDcInfo <- marvelDcInfo[!duplicated(marvelDcInfo$Nome), ]
  • Em seguida, selecionamos apenas algumas variáveis que iremos trabalhar: marvelDcInfo <- marvelDcInfo %>% select(Nome, Gender, Race, Publisher, Alignment)
marvelDcInfo <- marvelDcInfo[!duplicated(marvelDcInfo$Name), ]
marvelDcInfo <- marvelDcInfo %>%
  select(Name, Gender, Race, Publisher)

Junção dos Data Frames

  • Nessa parte unimos os DataSets marvelDcInfo e info_atributos de acordo com a coluna em comum Name, o argumento type = "inner" indica que apenas as linhas comuns a ambos os data frames serão incluídas no resultado: marvelDcStatsInfo <- join(marvelDcInfo, info_atributos, by = "Name", type = "inner")
  • Nessa parte fazemos a junção total dos Data Frames trabalhados: fullMarvelDc <- join(marvelDcStatsInfo, info_poderes, by = "Name", type = "inner")
marvelDcStatsInfo <- join(marvelDcInfo, info_atributos, by = "Name", type = "inner")
colnames(info_poderes)[colnames(info_poderes) == "hero_names"] <- "Name"
fullMarvelDc <- join(marvelDcStatsInfo, info_poderes, by = "Name", type = "inner")

Versão Final do Data Frame

Em resumo, esses comandos estão realizando transformações no data frame fullMarvelDc, incluindo a conversão para um formato longo, renomeação de colunas e filtragem de linhas com base em um valor específico. O resultado final é o data frame marvelDc, que contém as colunas relevantes e apenas as linhas onde o valor é “True” na coluna “value”.

marvelDc <- melt(fullMarvelDc, id = c("Name", "Gender", "Race", "Publisher", "Alignment", "Intelligence", 
                                         "Strength", "Speed", "Durability", "Power", "Combat", "Total"))
colnames(marvelDc)[colnames(marvelDc) == "variable"] <- "SuperPower"
marvelDc <- marvelDc %>%
  filter(value == "True") %>%
  select(-value)

PARTE B

Análise Exploratória

Podemos exibir o Data Frame que iremos trabalhar da seguinte forma:

paged_table(marvelDc)

Gender X Publisher

Podemos verificar o percentual de gênero dos personagens por cada editora. Nessa parte, esses comandos estão calculando a contagem, frequência relativa e porcentagem para cada combinação de “Publisher” e “Gender” no data frame marvelDc. Em seguida, eles calculam a soma das porcentagens para cada grupo de “Publisher”. O resultado final é um data frame chamado gender_publisher com as informações agregadas.

gender_publisher <- marvelDc %>%
  group_by(Publisher, Gender) %>%
  summarize(N = n()) %>%
  mutate(freq = N / sum(N),
         pct = round((freq*100), 0))

gender_publisher %>% group_by(Publisher) %>% summarize(total = sum(pct))
## # A tibble: 2 × 2
##   Publisher     total
##   <chr>         <dbl>
## 1 DC Comics       100
## 2 Marvel Comics   100
ggplot(gender_publisher, aes(x = Gender, y = pct, fill = Gender)) + # Dado de gender_publisher, definindo o eixo x = gênero, y = porcentagem e cor do preenchimento de acordo com o gênero.
  geom_col(color = "black") +  # Adiciona as barras ao gráfico com bordas pretas.
  labs(x = "Gênero", y = NULL, title = "Concentração de gêneros por editora") + # Modifica o rótulo do eixo x, retira o rótulo do eixo y e adiciona um título.
  guides(fill = FALSE) + # Remove a legenda da cor de preenchimento, pois ela é desnecessária neste caso.
  facet_grid(~ Publisher) + # Faz a divisão em dois gráficos de acordo com a editora.
  theme_bw() + # Define o tema do gráfico como um fundo branco.
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold"), #Define diferentes elementos visuais do gráfico, como o título centralizado, o tamanho e estilo da fonte dos títulos dos eixos, tamanho da fonte do texto do eixo, tamanho do texto das faixas e assim por diante.
        axis.title = element_text(size = 12, face = "bold"),
        axis.text = element_text(size = 11),
        strip.text = element_text(size = 13)) +
  scale_fill_manual(values = c("#FF81D0", "#009ADA")) + # Define uma paleta de cores manualmente.
  scale_x_discrete(labels = c("Feminino", "Masculino", "Indefinido")) + # Modifica os nomes dos rótulos do eixo x.
  scale_y_continuous(labels = function(x) paste0(format(x, scientific = FALSE), "%")) + # Altera os rótulos do eixo y para mostrar as porcentagens com o símbolo de porcentagem (%).
  geom_text(aes(label = paste0(pct, "%")), vjust = -0.3, size = 3.5) # Adiciona rótulos de texto acima das barras, exibindo as porcentagens correspondentes.

paleta_cores <- c("#FF81D0", "#009ADA") # Cria um vetor com duas cores que serão usadas posteriormente
ggplot(data = marvelDc, mapping = aes(x = Publisher, fill = Gender)) + # Dado de marvel_Dc, definindo o eixo x = editora e cor do preenchimento de acordo com o gênero.
  geom_bar(position = "fill", color = "black") + # Adiciona barras empilhadas ao gráfico, onde a altura das barras representa a proporção relativa de cada gênero dentro de cada editora.
  labs(x = NULL, # Retira o rótulo do eixo x.
       y = "Percentual", # Modifica o rótulo do eixo y.
       title = "Concentração de gêneros por editora", # Adiciona um título.
       fill = "Gênero") + # Modifica o nome da legenda.
  theme_classic() + # Define um estilo clássico para o gráfico.
  theme(plot.title = element_text(hjust = 0.5, size = 18, face = "bold"), # Realiza estilizações no título do gráfico.
       legend.position = "top", # Modifica o posicionamento da legenda.
       axis.text = element_text(size = 11)) + # Modidica o tamanho dos textos dos dados dos eixos.
  scale_fill_manual(values = paleta_cores, # Define a paleta de cores manualmente usando as cores do vetor paleta_cores.
                    labels = c("Feminino", "Masculino", "Indefinido")) + # Define os rótulos para as cores preenchidas, correspondendo aos gêneros "Feminino", "Masculino" e "Indefinido".
  scale_x_discrete(labels = c("DC Comics", "Marvel Comics")) # Altera os rótulos do eixo x.

A partir desses gráficos, percebemos que a proporção entre a distriução de genêros dos personagens é parecida. Nesse sentido, vemos que a predominância do genêro masculino é bem acentuada, levando em consideração que representam quase 80% de sua totalidade. Em contrapartida, vemos nessa base de dados que a Marvel possui personagens com gênero indefinido, enquanto a DC não.

Personagens por editora

A partir dos gráficos abaixo, percebemos que a editora Marvel Comics possui uma quantidade a mais de persogens em relação a DC Comics.

ggplot(data = marvelDc, mapping = aes(x = Publisher, fill = Publisher)) + # Dado de arvelDc, definindo o eixo x = editora e cor do preenchimento de acordo com a editora também.
  geom_bar(color = "black") + # Adiciona um gráfico de barras.
  labs(x = "Editora", y = NULL, title = "Personagens por Editora") + # Modifica o rótulo do eixo x, retira o rótulo do eixo y e adiciona um título ao gráfico.
  guides(fill = "none") + # Retira a legenda do gráfico.
  theme_bw() + # Adiciona um tema com fundo branco ao gráfico.
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold"), #Define diferentes elementos visuais do gráfico, como o título centralizado, o tamanho e estilo da fonte dos títulos dos eixos, tamanho da fonte do texto do eixo, tamanho do texto das faixas e assim por diante.
        axis.title = element_text(size = 12, face = "bold"),
        axis.text = element_text(size = 11), 
        strip.text = element_text(size = 13)) + 
  theme(plot.title = element_text(hjust = 0.5, size = 18, face = "bold"), # Realiza estilizações no título do gráfico.
        legend.position = "top", # Modifica a posição da legenda para o topo do gráfico.
        axis.text = element_text(size = 11)) + # Modidica o tamanho dos textos dos dados dos eixos.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) + # Adicona um paleta de cores referente as editoras.
  geom_text(stat = 'count', aes(label = stat(count)), vjust = -0.3, size = 4, color = "black") # Adiciona os valores correspondentes as editoras.

dados <- data.frame(Editora = c("DC", "Marvel"), # Cria um Data Frame contendo os valores de personagens de cada editora.
                    Valor = c(1386, 2352))

dados <- transform(dados, angulo_inicial = cumsum(Valor) - Valor, # Calcula os ângulos para cada editora.
                   angulo_final = cumsum(Valor))

dados <- transform(dados, Porcentagem = round(Valor / sum(Valor) * 100, 2)) # Calcula as porcentagens com 2 casas decimais.
# CRIANDO GRÁFICO DE PIZZA
ggplot(dados, aes(x = 1, y = Valor, fill = Editora)) +
  geom_bar(stat = "identity", color = "black", size = 1.2) + 
  coord_polar(theta = "y") +
  labs(x = NULL, y = NULL, title = "Personagens por Editora") + # Retira os nomes dos eixos e adiciona um título ao gráfico.
  theme_void() + # Adiciona um tema com fundo vazio.
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold")) + # Adiciona estilizações no título.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) + # Adiciona uma paleta de cores de acordo com as editoras.
  geom_text(aes(label = paste0(Porcentagem, "%")), # Adiciona a porcentagem correspondente a cada editora.
            position = position_stack(vjust = 0.5), # Posiciona o texto no centro do setor circular.
            size = 6, color = "white") # Adiciona cor e tamanho ao texto.
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Alinhamento do Personagem

Fazemos o mesmo processo do tópico anterior. Dessa vez, trabalharemos com a porcentagem de alinhamento dos personagem por editoras, ou seja, vamos analisar a concentração de heróis, vilões, neutros e indefinidos em ambas.

alignment_publisher <- marvelDc %>%
  group_by(Publisher, Alignment) %>%
  summarize(N = n()) %>%
  mutate(freq = N / sum(N),
         pct = round((freq*100), 0))
## `summarise()` has grouped output by 'Publisher'. You can override using the
## `.groups` argument.
alignment_publisher %>% group_by(Publisher) %>% summarize(total = sum(pct))
## # A tibble: 2 × 2
##   Publisher     total
##   <chr>         <dbl>
## 1 DC Comics       100
## 2 Marvel Comics   100
ggplot(alignment_publisher, aes(x = Alignment, y = pct, fill = Alignment)) + # Dado de alignment_publisher, definindo o eixo x = alinhamento do personagem, y = porcentagem e cor do preenchimento de acordo com o alinhamento,
  geom_col(color = "black") + # Adiciona as barras ao gráfico com bordas pretas.
  labs(x = "Gênero", y = NULL, title = "Concentração de alinhamento por editora") + # Define os rótulos dos eixos x e y, e um título para o gráfico.
  guides(fill = FALSE) + # Remove a legenda da cor de preenchimento, pois ela é desnecessária neste caso.
  facet_grid(~ Publisher) + # Faz a divisão em dois gráficos de acordo com a editora.
  theme_bw() + # Define o tema do gráfico como um fundo branco.
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold"), # Define diferentes elementos visuais do gráfico, como o título centralizado, o tamanho e estilo da fonte dos títulos dos eixos, tamanho da fonte do texto do eixo, tamanho do texto das faixas e assim por diante.
        axis.title = element_text(size = 12, face = "bold"),
        axis.text = element_text(size = 11),
        strip.text = element_text(size = 13)) +
  scale_fill_manual(values = c("#081B42", "#DAA520", "#CD5A35")) + #  Define as cores manualmente para cada alinhamento.
  scale_x_discrete(labels = c("Vilão", "Herói", "Neutro", "Indefinido")) + # Altera os rótulos do eixo x.
  scale_y_continuous(labels = function(x) paste0(format(x, scientific = FALSE), "%")) + # Altera os rótulos do eixo y para mostrar as porcentagens com o símbolo de porcentagem (%).
  geom_text(aes(label = paste0(pct, "%")), vjust = -0.3, size = 3.5) # Adiciona rótulos de texto acima das barras, exibindo as porcentagens correspondentes.

paleta_cores <- c("#081B42", "#DAA520", "#CD5A35") # Cria um vetor com duas cores que serão usadas posteriormente
ggplot(data = marvelDc, mapping = aes(x = Publisher, fill = Alignment)) +  # Dado de marvel_Dc, definindo o eixo x = editora e cor do preenchimento de acordo com o alinhamento do personagem.
  geom_bar(position = "fill", color = "black") + # Adiciona barras empilhadas ao gráfico, onde a altura das barras representa a proporção relativa de cada gênero dentro de cada editora.
  labs(x = NULL, # Retira o rótulo do eixo x.
       y = "Percentual", # Modifica o rótulo do eixo y.
       title = "Concentração de alinhamento por editora", # Adiciona um título.
       fill = "Alinhamento") + # Modifica o rótulo da legenda.
  theme_classic() + # Define um estilo clássico para o gráfico.
  theme(plot.title = element_text(hjust = 0.5, size = 18, face = "bold"), # Realiza estilizações no título do gráfico.
        legend.position = "top", # Modifica a posição da legenda para o topo do gráfico.
        axis.text = element_text(size = 11)) + # Modidica o tamanho dos textos dos dados dos eixos.
  scale_fill_manual(values = paleta_cores, # Define a paleta de cores manualmente usando as cores do vetor paleta_cores.
                  labels = c("Vilão", "Herói", "Neutro", "Indefinido")) + # Define os rótulos para as cores preenchidas, correspondendo aos alinhamentos dos personagens.
  scale_x_discrete(labels = c("DC Comics", "Marvel Comics")) # Altera os rótulos do eixo x.

Nessa análise, percebemos que a concentração dos alinhamentos dos personagens por editora é bem próxima, mesmo existindo números distintos de sujeitos nelas. Também foi constatado que existe aproximadamente o dobro de heróis em relação a vilões nessa base de dados.

Box Plot de Inteligência

Nesse gráfico, percebemos que existem personagens mais inteligentes na DC do que na Marvel em proporção, levando em consideração que os limites máximos se apresentam de maneira diferente. Também foi constatado que na DC Comics temos uma grande concentração de personagens entre os quartis 2 e 3, enquanto na Marvel temos uma grande concentração de indivíduos entre os quartis 1 e 2.

ggplot(data = marvelDc, mapping = aes(x = Publisher, y = Intelligence, fill = Publisher)) + # Trabalharemos com os dados de "marvelDC", o eixo x e a cor de preenchimento representam a editora tratada, o eixo y está relacionado com o nível de inteligência.
  geom_errorbar(stat = "boxplot", width = 0.35) + # Adiciona as linhas referentes aos extremos dos gráficos.
  geom_boxplot(width = 0.7, outlier.shape = 1, outlier.size = 2) + # Adiciona um Box Plot com largura, e no caso de existência de outliers, os exibe no gráfico.
  stat_summary(fun = function(x) quantile(x, probs = c(0.25, 0.5, 0.75)), # Adiciona os rótulos dos quartis ao box plot.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Q", c(1, 2, 3), ": ", round(..y..))), # Adiona o rótulo do quartil acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  stat_summary(fun = max, # Verifica o limite superior do gráfico.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Máx: ", round(..y..))), # Adiciona o rótulo de máximo acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  stat_summary(fun = min, # Verifica o limite inferior do gráfico.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Mín: ", round(..y..))), # Adiciona o rótulo de mínimo acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  guides(fill = "none") + # Retira a legenda do gráfico.
  labs(x = NULL, y = "Escala de Inteligência", title = "Box Plot de nível de inteligência dos personagens") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y e adiciona um texto ao gráfico.
  theme_bw() + # Adiona um tema ao gráfico.
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold"), # Realiza estilizações no título do gráfico.
        axis.title = element_text(size = 12, face = "bold"), # Realiza estilizações nos eixos gráfico.
        axis.text = element_text(size = 11)) + # Modidica o tamanho dos textos dos dados dos eixos.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) # Define as cores manualmente para as editoras.
## Warning: The dot-dot notation (`..y..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(y)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Box Plot de Força

Nesse gráfico, percebemos que em ambas as editoras, o mínimo, máximo e a mediana do nível de força são iguais. Em contrapartida, os dados da Marvel estão mais comprimidos entre os Quartis 1 e 3 se comparados aos da DC que se apresentam de maneiras mais dispersas. Além disso, pode-se observar que a região entre os Quartis 2 e 3 da DC é maior do que a da Marvel, ou seja, a DC Comics possui mais personagens com níveis de poder elevados em proporção.

ggplot(data = marvelDc, mapping = aes(x = Publisher, y = Strength, fill = Publisher)) + # Trabalharemos com os dados de "marvelDC", o eixo x e a cor de preenchimento representam a editora tratada, o eixo y está relacionado com o nível de força.
  geom_errorbar(stat = "boxplot", width = 0.35) + # Adiciona as linhas referentes aos extremos dos gráficos.
  geom_boxplot(width = 0.7, outlier.shape = 1, outlier.size = 2) + # Adiciona um Box Plot com largura, e no caso de existência de outliers, os exibe no gráfico.
  stat_summary(fun = function(x) quantile(x, probs = c(0.25, 0.5, 0.75)), # Adiciona os rótulos dos quartis ao box plot.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Q", c(1, 2, 3), ": ", round(..y..))), # Adiona o rótulo do quartil acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  stat_summary(fun = max, # Verifica o limite superior do gráfico.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Máx: ", round(..y..))), # Adiciona o rótulo de máximo acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  stat_summary(fun = min, # Verifica o limite inferior do gráfico.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Mín: ", round(..y..))), # Adiciona o rótulo de mínimo acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  guides(fill = "none") + # Retira a legenda do gráfico.
  labs(x = NULL, y = "Escala de força", title = "Box Plot de nível de força dos personagens") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y e adiciona um texto ao gráfico.
  theme_bw() + # Adiona um tema ao gráfico.
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold"), # Realiza estilizações no título do gráfico.
        axis.title = element_text(size = 12, face = "bold"), # Realiza estilizações nos eixos gráfico.
        axis.text = element_text(size = 11)) + # Modidica o tamanho dos textos dos dados dos eixos.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) # Define as cores manualmente para as editoras.

Box Plot de Velocidade

Nessa comparação, percebemos que ambas as editoras apresentam mínimos e máximos iguais. Em contrapartida, na Marvel temos uma concentração maior de personagens na zona entre os quartis 1 e 3 se comparada a sua concorrente, que possui uma maior variação de velocidades nessa região.

ggplot(data = marvelDc, mapping = aes(x = Publisher, y = Speed, fill = Publisher)) + # Trabalharemos com os dados de "marvelDC", o eixo x e a cor de preenchimento representam a editora tratada, o eixo y está relacionado com o nível de velocidade.
  geom_errorbar(stat = "boxplot", width = 0.35) + # Adiciona as linhas referentes aos extremos dos gráficos.
  geom_boxplot(width = 0.7, outlier.shape = 1, outlier.size = 2) + # Adiciona um Box Plot com largura, e no caso de existência de outliers, os exibe no gráfico.
  stat_summary(fun = function(x) quantile(x, probs = c(0.25, 0.5, 0.75)), # Adiciona os rótulos dos quartis ao box plot.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Q", c(1, 2, 3), ": ", round(..y..))), # Adiona o rótulo do quartil acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  stat_summary(fun = max, # Verifica o limite superior do gráfico.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Máx: ", round(..y..))), # Adiciona o rótulo de máximo acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  stat_summary(fun = min, # Verifica o limite inferior do gráfico.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Mín: ", round(..y..))), # Adiciona o rótulo de mínimo acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  guides(fill = "none") + # Retira a legenda do gráfico.
  labs(x = NULL, y = "Escala de velocidade", title = "Box Plot de nível de velocidade dos personagens") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y e adiciona um texto ao gráfico.
  theme_bw() + # Adiona um tema ao gráfico.
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold"), # Realiza estilizações no título do gráfico.
        axis.title = element_text(size = 12, face = "bold"), # Realiza estilizações nos eixos gráfico.
        axis.text = element_text(size = 11)) + # Modidica o tamanho dos textos dos dados dos eixos.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) # Define as cores manualmente para as editoras.

Box Plot de Resistênicia

Nesse gráfico, percebemos que existem personagens da DC com nível maior de resistência do que da Marvel, levando em consideração que os máximos são diferentes. Em contrapartida, vemos um gráfico mais achatado da Marvel, mostrando que existem persogens mais tipados no quesito de resistência.

ggplot(data = marvelDc, mapping = aes(x = Publisher, y = Durability, fill = Publisher)) + # Trabalharemos com os dados de "marvelDC", o eixo x e a cor de preenchimento representam a editora tratada, o eixo y está relacionado com o nível de resistênicia.
  geom_errorbar(stat = "boxplot", width = 0.35) + # Adiciona as linhas referentes aos extremos dos gráficos.
  geom_boxplot(width = 0.7, outlier.shape = 1, outlier.size = 2) + # Adiciona um Box Plot com largura, e no caso de existência de outliers, os exibe no gráfico.
  stat_summary(fun = function(x) quantile(x, probs = c(0.25, 0.5, 0.75)), # Adiciona os rótulos dos quartis ao box plot.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Q", c(1, 2, 3), ": ", round(..y..))), # Adiona o rótulo do quartil acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  stat_summary(fun = max, # Verifica o limite superior do gráfico.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Máx: ", round(..y..))), # Adiciona o rótulo de máximo acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  stat_summary(fun = min, # Verifica o limite inferior do gráfico.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Mín: ", round(..y..))), # Adiciona o rótulo de mínimo acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  guides(fill = "none") + # Retira a legenda do gráfico.
  labs(x = NULL, y = "Escala de resistênicia", title = "Box Plot de nível de resistênicia dos personagens") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y e adiciona um texto ao gráfico.
  theme_bw() + # Adiona um tema ao gráfico.
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold"), # Realiza estilizações no título do gráfico.
        axis.title = element_text(size = 12, face = "bold"), # Realiza estilizações nos eixos gráfico.
        axis.text = element_text(size = 11)) + # Modidica o tamanho dos textos dos dados dos eixos.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) # Define as cores manualmente para as editoras.

Box Plot de Poder

No Box Plot de Poder da DC Comics, percebemos que existe uma grande concentração de personagens muito poderosos e poucos personagens com níveis de poderes baixos. Enquanto isso a Marvel possue personagens com grandes níveis de poder também, porém numa escala menor que a DC, o que nos leva a entender que a DC Comics possue os personagens mais poderosos.

ggplot(data = marvelDc, mapping = aes(x = Publisher, y = Power, fill = Publisher)) + # Trabalharemos com os dados de "marvelDC", o eixo x e a cor de preenchimento representam a editora tratada, o eixo y está relacionado com o nível de poder.
  geom_errorbar(stat = "boxplot", width = 0.35) + # Adiciona as linhas referentes aos extremos dos gráficos.
  geom_boxplot(width = 0.7, outlier.shape = 1, outlier.size = 2) + # Adiciona um Box Plot com largura, e no caso de existência de outliers, os exibe no gráfico.
  stat_summary(fun = function(x) quantile(x, probs = c(0.25, 0.5, 0.75)), # Adiciona os rótulos dos quartis ao box plot.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Q", c(1, 2, 3), ": ", round(..y..))), # Adiona o rótulo do quartil acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = 1.20) + # Translada verticalmente o texto.
  stat_summary(fun = max, # Verifica o limite superior do gráfico.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Máx: ", round(..y..))), # Adiciona o rótulo de máximo acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  stat_summary(fun = min, # Verifica o limite inferior do gráfico.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Mín: ", round(..y..))), # Adiciona o rótulo de mínimo acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  guides(fill = "none") + # Retira a legenda do gráfico.
  labs(x = NULL, y = "Escala de poder", title = "Box Plot de nível de poder dos personagens") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y e adiciona um texto ao gráfico.
  theme_bw() + # Adiona um tema ao gráfico.
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold"), # Realiza estilizações no título do gráfico.
        axis.title = element_text(size = 12, face = "bold"), # Realiza estilizações nos eixos gráfico.
        axis.text = element_text(size = 11)) + # Modidica o tamanho dos textos dos dados dos eixos.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) # Define as cores manualmente para as editoras.

Box Plot de Combate

Nesse gráfico, percebemos que existem muitos persogens com nível alto de combate nas duas editoras, considerando o comprimento entre o quartil 3 e o limite superior. Entretanto, a maior parte dos personagens da Marvel estão nos Quartis 2 e 3, enquanto a maior parte dos personagens da DC estão entre os Quartis 1 e 2, o que nos leva a entender que a Marvel Comics possue mais personagens com níveis de combate elevado do que a DC Comics.

ggplot(data = marvelDc, mapping = aes(x = Publisher, y = Combat, fill = Publisher)) + # Trabalharemos com os dados de "marvelDC", o eixo x e a cor de preenchimento representam a editora tratada, o eixo y está relacionado com o nível de combate.
  geom_errorbar(stat = "boxplot", width = 0.35) + # Adiciona as linhas referentes aos extremos dos gráficos.
  geom_boxplot(width = 0.7, outlier.shape = 1, outlier.size = 2) + # Adiciona um Box Plot com largura, e no caso de existência de outliers, os exibe no gráfico.
  stat_summary(fun = function(x) quantile(x, probs = c(0.25, 0.5, 0.75)), # Adiciona os rótulos dos quartis ao box plot.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Q", c(1, 2, 3), ": ", round(..y..))), # Adiona o rótulo do quartil acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  stat_summary(fun = max, # Verifica o limite superior do gráfico.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Máx: ", round(..y..))), # Adiciona o rótulo de máximo acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  stat_summary(fun = min, # Verifica o limite inferior do gráfico.
               geom = "text", # Adiciona um objeto de texto.
               aes(label = paste0("Mín: ", round(..y..))), # Adiciona o rótulo de mínimo acompanhado do valor dele.
               size = 3.5, # Modifica o tamanho do texto.
               vjust = -0.20) + # Translada verticalmente o texto.
  guides(fill = "none") + # Retira a legenda do gráfico.
  labs(x = NULL, y = "Escala de combate", title = "Box Plot de nível de combate dos personagens") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y e adiciona um texto ao gráfico.
  theme_bw() + # Adiona um tema ao gráfico.
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold"), # Realiza estilizações no título do gráfico.
        axis.title = element_text(size = 12, face = "bold"), # Realiza estilizações nos eixos gráfico.
        axis.text = element_text(size = 11)) + # Modidica o tamanho dos textos dos dados dos eixos.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) # Define as cores manualmente para as editoras.

Histograma de Força

No histograma da DC Comics, percebemos que existe uma certa dualidade entre o nível de força entre os personagens, levando em consideração que existe uma concentração muito grande no intervalo de 10 à 20 e no intervalo de 90 à 100, isso implica que existe uma grande quantia de seres muito fortes e outra grande quantia de personagens muito fracos.

ggplot(data.frame(marvelDc), aes(x = Strength, fill = Publisher)) + # Dado de marvel_Dc, definindo o eixo x = força e cor do preenchimento de acordo com a editora.
  geom_histogram(color = "black", bins = 10) + # Adiciona o histograma com contorno preto ao gráfico com 10 intervalos trabalhados.
  facet_wrap(~ Publisher) + # Faz a divisão em dois gráficos de acordo com a editora.
  guides(fill = "none") + # Retira a legenda das editoras, visto que as cores e o texto já indicam a informação necessária.
  labs(x = "Níveis de Força", y = "Frequência", title = "Box Plot de Força") + # Define os rótulos dos eixos x e y, o título do gráfico.
  theme_bw() + # Define o tema do gráfico como um fundo branco.
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold"), # Realiza estilizações no título do gráfico.
        axis.title = element_text(size = 12, face = "bold"), # Realiza estilizações nos eixos gráfico.
        axis.text = element_text(size = 11), # Modidica o tamanho dos textos dos dados dos eixos.
        strip.text = element_text(size = 13)) + # Modifica o tamanho dos rótulos das editoras no gráfico
  scale_fill_manual(values = c("#1F83C2", "#D93030")) # Define as cores manualmente para as editoras.

Histograma de Velocidade

Neste gráfico, temos um histograma da Marvel mais distorcido à direita, isso indica que há uma concentração maior de valores menores e uma dispersão maior de valores maiores, esse “decrescimento” faz com que temos uma concentração mais elevada em intervalos de números menores do que maiores, ou seja, temos muito mais personagens mais lentos do que rápidos nessa editora.

ggplot(data.frame(marvelDc), aes(x = Speed, fill = Publisher)) + # Dado de marvel_Dc, definindo o eixo x = velocidade e cor do preenchimento de acordo com a editora.
  geom_histogram(color = "black", bins = 10) + # Adiciona o histograma com contorno preto ao gráfico com 10 intervalos trabalhados.
  facet_wrap(~ Publisher) + # Faz a divisão em dois gráficos de acordo com a editora.
  labs(x = "Níveis de Velocidade", y = "Frequência", title = "Box Plot de Velocidade") + # Define os rótulos dos eixos x e y, o título do gráfico.
  guides(fill = "none") + # Retira a legenda das editoras, visto que as cores e o texto já indicam a informação necessária.
  theme_bw() + # Define o tema do gráfico como um fundo branco.
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold"), # Realiza estilizações no título do gráfico.
        axis.title = element_text(size = 12, face = "bold"), # Realiza estilizações nos eixos gráfico.
        axis.text = element_text(size = 11), # Modidica o tamanho dos textos dos dados dos eixos.
        strip.text = element_text(size = 13)) + # Modifica o tamanho dos rótulos das editoras no gráfico
  scale_fill_manual(values = c("#1F83C2", "#D93030")) # Define as cores manualmente para as editoras.

Histograma de Resistência

Verificamos que o histograma da editora Marvel é distorcido à esquerda, ou seja, ele indica uma concentração maior de valores maiores e uma dispersão maior de valores menores, com a cauda da distribuição se estendendo mais para a esquerda, ou seja, temos muitos personagens com um grande nível de resistência. Em contrapardida, na DC Comics temos poucos personagens com nível de resistência máxima, como mostra a última barra de cor azul.

ggplot(data.frame(marvelDc), aes(x = Durability, fill = Publisher)) + # Dado de marvel_Dc, definindo o eixo x = resitência e cor do preenchimento de acordo com a editora.
  geom_histogram(color = "black", bins = 10) + # Adiciona o histograma com contorno preto ao gráfico com 10 intervalos trabalhados.
  facet_wrap(~ Publisher) + # Faz a divisão em dois gráficos de acordo com a editora.
  labs(x = "Níveis de Resistência", y = "Frequência", title = "Box Plot de Resistência") + # Define os rótulos dos eixos x e y, o título do gráfico.
  guides(fill = "none") + # Retira a legenda das editoras, visto que as cores e o texto já indicam a informação necessária.
  theme_bw() + # Define o tema do gráfico como um fundo branco.
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold"), # Realiza estilizações no título do gráfico.
        axis.title = element_text(size = 12, face = "bold"), # Realiza estilizações nos eixos gráfico.
        axis.text = element_text(size = 11), # Modidica o tamanho dos textos dos dados dos eixos.
        strip.text = element_text(size = 13)) + # Modifica o tamanho dos rótulos das editoras no gráfico.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) # Define as cores manualmente para as editoras.

Histograma de Poder

Em ambos os histogramas, percebemos que existe uma grande concentração de personagens com nível de poder elevado (90 à 100).

ggplot(data.frame(marvelDc), aes(x = Power, fill = Publisher)) + # Dado de marvel_Dc, definindo o eixo x = poder e cor do preenchimento de acordo com a editora.
  geom_histogram(color = "black", bins = 10) + # Adiciona o histograma com contorno preto ao gráfico com 10 intervalos trabalhados.
  facet_wrap(~ Publisher) + # Faz a divisão em dois gráficos de acordo com a editora.
  labs(x = "Níveis de Poder", y = "Frequência", title = "Box Plot de Poder") + # Define os rótulos dos eixos x e y, o título do gráfico.
  guides(fill = "none") + # Retira a legenda das editoras, visto que as cores e o texto já indicam a informação necessária.
  theme_bw() + # Define o tema do gráfico como um fundo branco.
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold"), # Realiza estilizações no título do gráfico.
        axis.title = element_text(size = 12, face = "bold"), # Realiza estilizações nos eixos gráfico.
        axis.text = element_text(size = 11), # Modidica o tamanho dos textos dos dados dos eixos.
        strip.text = element_text(size = 13)) + # Modifica o tamanho dos rótulos das editoras no gráfico.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) # Define as cores manualmente para as editoras.

Histograma de Combate

No histrograma de combate de persogens da Marvel, temos que existe uma grande concentração de personagens com nível médio de combate.

ggplot(data.frame(marvelDc), aes(x = Combat,fill = Publisher)) + # Dado de marvel_Dc, definindo o eixo x = combate e cor do preenchimento de acordo com a editora.
  geom_histogram(color = "black", bins = 10) + # Adiciona o histograma com contorno preto ao gráfico com 10 intervalos trabalhados.
  facet_wrap(~ Publisher) + # Faz a divisão em dois gráficos de acordo com a editora.
  labs(x = "Níveis de Combate", y = "Frequência", title = "Box Plot de Combate") + # Define os rótulos dos eixos x e y, o título do gráfico.
  guides(fill = "none") + # Retira a legenda das editoras, visto que as cores e o texto já indicam a informação necessária.
  theme_bw() + # Define o tema do gráfico como um fundo branco.
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold"), # Realiza estilizações no título do gráfico.
        axis.title = element_text(size = 12, face = "bold"), # Realiza estilizações nos eixos gráfico.
        axis.text = element_text(size = 11), # Modidica o tamanho dos textos dos dados dos eixos.
        strip.text = element_text(size = 13)) + # Modifica o tamanho dos rótulos das editoras no gráfico.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) # Define as cores manualmente para as editoras.

Top 30 personagens mais inteligentes

Nesse gráfico, fizemos um Top 30 dos persogens mais inteligentes, em que a cor faz relação com a editora do indivíduo. Em especial, temos um outlier que possui um nível maior de inteligência que os demais, o Mister Mxyzptlk, que é um personagem da DC Comics, conhecido como um vilão recorrente do Super-Homem, ele é uma entidade mágica extradimensional da Quinta Dimensão, com poderes incríveis e uma personalidade impish (travessa). Também tivemos resultados esperados, como o Professor X, Homem de Ferro, Batman, entre outros.

marvelDc_inteligencia <- marvelDc %>% # Cria um novo dataframe chamado marvelDc_inteligencia.
  group_by(Name, Publisher) %>% # Agrupa os dados por nome (Name) e editora (Publisher).
  distinct(Intelligence) %>% # Mantém apenas os valores únicos da variável de inteligência (Intelligence) para cada combinação de nome e editora. Isso garante que cada personagem apareça apenas uma vez no resultado.
  select(Name, Intelligence) %>% # Seleciona apenas as colunas de nome e inteligência.
  arrange(-Intelligence) # Ordena os dados em ordem decrescente de inteligência. Isso faz com que os personagens mais inteligentes fiquem no topo.
## Adding missing grouping variables: `Publisher`
ggplot(marvelDc_inteligencia[1:30, ], aes(x = reorder(Name, Intelligence), y = Intelligence)) + # Cria o objeto básico do gráfico usando o dataframe marvelDc_inteligencia contendo os 30 personagens mais inteligentes. O eixo x representa o nome dos personagens, com a ordem determinada pela inteligência, e o eixo y representa a escala de inteligência.
  geom_bar(stat = "identity", aes(fill = Publisher)) + # Adiciona as barras ao gráfico, onde a altura das barras é determinada pelos valores de inteligência. A cor de preenchimento das barras é definida com base na editora (Publisher).
  ylim(0, 120) + # Delimita o o intervalo trabalhado do eixo y.
  labs(x = NULL, y = "Nível de inteligência", title = "Top 30 personagens mais inteligentes", fill = "Editora") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y, adiciona um título e modifica o nome da legenda.
  coord_flip() + # Inverte o eixo x com o eixo y.
  theme_bw() + # Define o tema do gráfico como um fundo branco.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) + # Define as cores manualmente para as editoras.
  theme(plot.title = element_text(hjust = 0.5, size = 18, face = "bold"), # Realiza modifições no título.
        legend.position = "top", # Modifica a posição da legenda para o topo.
        axis.text = element_text(size = 7.5)) # Modidica o tamanho dos textos dos dados dos eixos.

Top 30 personagens mais fortes

Em seguida, fizemos um Top 30 de personagens mais fortes de ambas as editoras, tivemos resultados interessantes como o Titã Thanos, o Hulk e o Superman, como já esperado. Alguns personagens chamaram a atenção pelo nível de força, como o Juggernaut (Fanático), em pesquisas foi descoberto que o personagem possui força ilimitada em movimento: “Uma característica distintiva do Fanático é sua habilidade de se tornar invencível quando está em movimento. Uma vez que ele começa a se mover em uma determinada direção, nada pode pará-lo até que ele decida parar. Essa capacidade é conhecida como”Momentum Invulnerability” e o torna virtualmente imparável quando está em movimento”.

marvelDc_forca <- marvelDc %>% # Cria um novo dataframe chamado marvelDc_forca.
  group_by(Name, Publisher) %>% # Agrupa os dados por nome (Name) e editora (Publisher).
  distinct(Strength) %>% # Mantém apenas os valores únicos da variável de força (Strength) para cada combinação de nome e editora. Isso garante que cada personagem apareça apenas uma vez no resultado.
  select(Name, Strength) %>% # Seleciona apenas as colunas de nome e força.
  arrange(-Strength) # Ordena os dados em ordem decrescente de força. Isso faz com que os personagens mais fortes fiquem no topo.
## Adding missing grouping variables: `Publisher`
ggplot(marvelDc_forca[1:30, ], aes(x = reorder(Name, Strength), y = Strength)) + # Cria o objeto básico do gráfico usando o dataframe marvelDc_forca contendo os 30 personagens mais fortes. O eixo x representa o nome dos personagens, com a ordem determinada pela força, e o eixo y representa a escala de força.
  geom_bar(stat = "identity", aes(fill = Publisher)) + # Adiciona as barras ao gráfico, onde a altura das barras é determinada pelos valores de velocidade. A cor de preenchimento das barras é definida com base na editora (Publisher).
  ylim(0, 100) + # Delimita o o intervalo trabalhado do eixo y.
  labs(x = NULL, y = "Nível de força", title = "Top 30 personagens mais fortes", fill = "Editora") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y, adiciona um título e modifica o nome da legenda.
  coord_flip() + # Inverte o eixo x com o eixo y.
  theme_bw() + # Define o tema do gráfico como um fundo branco.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) + # Define as cores manualmente para as editoras.
  theme(plot.title = element_text(hjust = 0.5, size = 18, face = "bold"), # Realiza modifições no título.
        legend.position = "top", # Modifica a posição da legenda para o topo.
        axis.text = element_text(size = 7.5)) # Modidica o tamanho dos textos dos dados dos eixos.

Top 30 personagens mais rápidos

Fizemos também um top 30 dos personagens mais rápidos, o primeiro ponto notável é a existência de diversos Flash’s no gráfico, isso se dá pela criação de vários HQ’s em que os personagens são de unirversos distintos. Como destaque esperado temos o Zoom, que é um personagem da DC Comics e um dos principais antagonistas do Flash, ele é um velocista com habilidades sobre-humanas, é conhecido por sua velocidade incrível e por ser um adversário formidável para o Flash.

marvelDc_velocidade <- marvelDc %>% # Cria um novo dataframe chamado marvelDc_velocidade.
  group_by(Name, Publisher) %>% # Agrupa os dados por nome (Name) e editora (Publisher).
  distinct(Speed) %>% # Mantém apenas os valores únicos da variável de velocidade (Speed) para cada combinação de nome e editora. Isso garante que cada personagem apareça apenas uma vez no resultado.
  select(Name, Speed) %>% # Seleciona apenas as colunas de nome e velocidade.
  arrange(-Speed) # Ordena os dados em ordem decrescente de velocidade. Isso faz com que os personagens mais rápidos fiquem no topo.
## Adding missing grouping variables: `Publisher`
ggplot(marvelDc_velocidade[1:30, ], aes(x = reorder(Name, Speed), y = Speed)) + # Cria o objeto básico do gráfico usando o dataframe marvelDc_velocidade contendo os 30 personagens mais rápidos. O eixo x representa o nome dos personagens, com a ordem determinada pela velocidade, e o eixo y representa a velocidade.
  geom_bar(stat = "identity", aes(fill = Publisher)) + # Adiciona as barras ao gráfico, onde a altura das barras é determinada pelos valores de velocidade. A cor de preenchimento das barras é definida com base na editora (Publisher).
  ylim(0, 100) + # Delimita o o intervalo trabalhado do eixo y.
  labs(x = NULL, y = "Nível de velocidade", title = "Top 30 personagens mais rápidos", fill = "Editora") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y, adiciona um título e modifica o nome da legenda.
  coord_flip() + # Inverte o eixo x com o eixo y.
  theme_bw() + # Define o tema do gráfico como um fundo branco.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) + # Define as cores manualmente para as editoras.
  theme(plot.title = element_text(hjust = 0.5, size = 18, face = "bold"), # Realiza modifições no título.
        legend.position = "top", # Modifica a posição da legenda para o topo.
        axis.text = element_text(size = 7.5)) # Modidica o tamanho dos textos dos dados dos eixos.

Top 30 personagens mais resistentes

Nessa análise dos top 30 personagens mais resistentes, temos quatro outliers, o Doomsday (Apocalypse - um dos principais vilões do Superman), o Stardust (um membro dos Arautos de Galactus), o Surfista Prateado (herói cósmico da Marvel) e o Nova (herói cósmico da Marvel). Assim, percebemos que persogens de nível cósmico, como os quatro mencionados, possuem maior nível de resistência.

marvelDc_durabilidade <- marvelDc %>% # Cria um novo dataframe chamado marvelDc_durabilidade.
  group_by(Name, Publisher) %>% # Agrupa os dados por nome (Name) e editora (Publisher).
  distinct(Durability) %>% # Mantém apenas os valores únicos da variável de durabiidade (Durability) para cada combinação de nome e editora. Isso garante que cada personagem apareça apenas uma vez no resultado.
  select(Name, Durability) %>% # Seleciona apenas as colunas de nome e durabilidade.
  arrange(-Durability) # Ordena os dados em ordem decrescente de resistência. Isso faz com que os personagens mais resistentes fiquem no topo.

ggplot(marvelDc_durabilidade[1:30, ], aes(x = reorder(Name, Durability), y = Durability)) +  # Cria o objeto básico do gráfico usando o dataframe marvelDc_durabilidade contendo os 30 personagens mais resistentes. O eixo x representa o nome dos personagens, com a ordem determinada pela resistência, e o eixo y representa a resistência.
  geom_bar(stat = "identity", aes(fill = Publisher)) + # Adiciona as barras ao gráfico, onde a altura das barras é determinada pelos valores de velocidade. A cor de preenchimento das barras é definida com base na editora (Publisher).
  ylim(0, 125) + # Delimita o o intervalo trabalhado do eixo y.
  labs(x = NULL, y = "Nível de resistência", title = "Top 30 personagens mais resistentes", fill = "Editora") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y, adiciona um título e modifica o nome da legenda.
  coord_flip() + # Inverte o eixo x com o eixo y.
  theme_bw() + # Define o tema do gráfico como um fundo branco.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) + # Define as cores manualmente para as editoras.
  theme(plot.title = element_text(hjust = 0.5, size = 18, face = "bold"), # Realiza modifições no título.
        legend.position = "top", # Modifica a posição da legenda para o topo.
        axis.text = element_text(size = 7.5)) # Modidica o tamanho dos textos dos dados dos eixos.

Top 30 personagens mais poderosos

No top 30 dos personagens mais poderosos, percebemos que todos da listagem recebem nível máximo de poder. É válido ressaltar que os principais vilões das franquias de quadrinhos são os mais poderosos, como o Thanos, Ultron, Apocalypse, Galactus e Darkseid.

marvelDc_poder <- marvelDc %>% # Cria um novo dataframe chamado marvelDc_poder.
  group_by(Name, Publisher) %>% # Agrupa os dados por nome (Name) e editora (Publisher).
  distinct(Power) %>% # Mantém apenas os valores únicos da variável de poder (Power) para cada combinação de nome e editora. Isso garante que cada personagem apareça apenas uma vez no resultado.
  select(Name, Power) %>% # Seleciona apenas as colunas de nome e poder.
  arrange(-Power) # Ordena os dados em ordem decrescente de poder. Isso faz com que os personagens mais poderosos fiquem no topo.
## Adding missing grouping variables: `Publisher`
ggplot(marvelDc_poder[1:30, ], aes(x = reorder(Name, Power), y = Power)) + # Cria o objeto básico do gráfico usando o dataframe marvelDc_poder contendo os 30 personagens mais poderosos O eixo x representa o nome dos personagens, com a ordem determinada pelo nível de poder, e o eixo y representa o poder.
  geom_bar(stat = "identity", aes(fill = Publisher)) + # Adiciona as barras ao gráfico, onde a altura das barras é determinada pelos valores de velocidade. A cor de preenchimento das barras é definida com base na editora (Publisher).
  ylim(0, 100) + # Delimita o o intervalo trabalhado do eixo y.
  labs(x = NULL, y = "Nível de poder", title = "Top 30 personagens mais poderosos", fill = "Editora") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y, adiciona um título e modifica o nome da legenda.
  coord_flip() + # Inverte o eixo x com o eixo y.
  theme_bw() + # Define o tema do gráfico como um fundo branco.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) + # Define as cores manualmente para as editoras.
  theme(plot.title = element_text(hjust = 0.5, size = 18, face = "bold"), # Realiza modifições no título.
        legend.position = "top", # Modifica a posição da legenda para o topo.
        axis.text = element_text(size = 7.5)) # Modidica o tamanho dos textos dos dados dos eixos.

Top 30 dos melhores personagens em combate

Nesse Top 30 pegamos os melhores personagens com estratégias de combate. Temos um outlier que leva a melhor em relação aos outros, o Ares, que é um personagem da Marvel Comics, ele é baseado na figura mitológica grega de mesmo nome, que é o Deus da Guerra. Também é interessante ressaltar que o Batman e suas variações estão dentro do Ranking, confirmando a tese que o Batman sempre está preparado, com o lema “Always Be Prepared”.

marvelDc_combate <- marvelDc %>% # Cria um novo dataframe chamado marvelDc_combate.
  group_by(Name, Publisher) %>% # Agrupa os dados por nome (Name) e editora (Publisher).
  distinct(Combat) %>% # Mantém apenas os valores únicos da variável de combate (Combat) para cada combinação de nome e editora. Isso garante que cada personagem apareça apenas uma vez no resultado.
  select(Name, Combat) %>% # Seleciona apenas as colunas de nome e combate.
  arrange(-Combat) # Ordena os dados em ordem decrescente de comabte. Isso faz com que os personagens melhores em combate fiquem no topo.
## Adding missing grouping variables: `Publisher`
ggplot(marvelDc_combate[1:30, ], aes(x = reorder(Name, Combat), y = Combat)) + # Cria o objeto básico do gráfico usando o dataframe marvelDc_combate contendo os 30 personagens melhores em combate. O eixo x representa o nome dos personagens, com a ordem determinada pelo combate, e o eixo y representa a escala de combate.
  geom_bar(stat = "identity", aes(fill = Publisher)) + # Adiciona as barras ao gráfico, onde a altura das barras é determinada pelos valores de velocidade. A cor de preenchimento das barras é definida com base na editora (Publisher).
  ylim(0, 105) + # Delimita o o intervalo trabalhado do eixo y.
  labs(x = NULL, y = "Nível de combate", title = "Top 30 dos melhores personagens em combate", fill = "Editora") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y, adiciona um título e modifica o nome da legenda.
  coord_flip() + # Inverte o eixo x com o eixo y.
  theme_bw() + # Define o tema do gráfico como um fundo branco.
  scale_fill_manual(values = c("#1F83C2", "#D93030")) + # Define as cores manualmente para as editoras.
  theme(plot.title = element_text(hjust = 0.5, size = 18, face = "bold"), # Realiza modifições no título.
        legend.position = "top", # Modifica a posição da legenda para o topo.
        axis.text = element_text(size = 7.5)) # Modidica o tamanho dos textos dos dados dos eixos.

Raças mais recorrentes

Nesse gráfico fizemos as Top 15 raças mais recorrentes dos personagens por editora, para a DC foi escolhido uma paleta de cores frias e para a Marvel foi escolhido uma paleta de cores quentes. Percebemos que em ambas as editoras, a raça principal é a humana, além disso na Marvel existem muitos personagens mutantes, parte deles derivados dos X-Men, e na DC a segunda raça mais recorrente são os Kryptoniamos, que possuem parentesco com o Superman.

paleta_cores_dc <- c("#5B2D90", "#491D74", "#340556", "#20409A", "#0A195C", "#0065B5", "#00508F", "#02376B", "#02B9BD", "#01A9AC", "#02888B", "#01A55E", "#006535", "#73BF43", "#3C7025")  # Define uma paleta de cores para os tipos de raças da DC Comics.

DCRaca <- marvelDc %>% # Cria um novo dataframe chamado DCRaca.
  filter(!is.na(Race)) %>% # Os dados são filtrados para remover os registros em que o campo Race é NA (não disponível).
  filter(Publisher == "DC Comics") %>% # Os dados são filtrados novamente para selecionar apenas os personagens da DC Comics, com base na coluna Publisher que deve ser igual a "DC Comics".
  group_by(Race) %>% # Os dados são agrupados pela raça (Race).
  dplyr::count(Race) %>% # A função count do pacote dplyr é aplicada para contar a ocorrência de cada raça.
  select(Race, Contagem = n) %>% # A coluna n resultante da contagem é renomeada para Contagem utilizando a função select para melhorar a legibilidade.
  arrange(-Contagem) # Os dados são ordenados em ordem decrescente de contagem usando a função arrange.
DCRaca <- ggplot(DCRaca[1:15, ], aes(x = reorder(Race, Contagem), y = Contagem)) + # Cria o objeto básico do gráfico usando o dataframe DCRaca contendo as 15 raças mais recorrentes da DC Comics. O eixo x representa o nome dos personagens, com a ordem determinada pela contagem, e o eixo y representa a escala de reccorência.
  geom_bar(stat = "identity", aes(fill = Race)) + # Adiciona as barras ao gráfico, onde a altura das barras é determinada pela porcentagem da raça. A cor de preenchimento das barras é definida com base na editora (Publisher).
  labs(x = NULL, y = "Quantidade de personagens", title = "Raças dos personagens da DC", subtitle= "Top 15 raças") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y, adiciona título e subtítulo ao gráfico.
  geom_label(stat = "identity", aes(label = Contagem), size = 7) + # Adiciona rótulos nas barras, mostrando a contagem de personagens correspondentes.
  coord_flip() + # Inverte o eixo x com o eixo y.
  guides(fill = FALSE, alpha = FALSE) + # As legendas de preenchimento e transparência são desativadas.
  theme_bw() +  # Define o tema do gráfico como um fundo branco.
  theme(plot.title = element_text(hjust = 0.5, size = 45, face = "bold"), # Realiza modifições no título.
        plot.subtitle = element_text(size = 35), # Realiza modifições no subtítulo.
        axis.title = element_text(hjust = 0.5, size = 35, face = "bold"), # Realiza modificações nos eixos.
        axis.text.y = element_text(angle = 0, size = 35, face = "bold"), # Realica modificações em cada raça.
        axis.text.x = element_text(angle = 0, hjust = 0.5, size = 35, face = "bold")) + # Realiza modificações nos valores do eixo x.
  scale_fill_manual(values = paleta_cores_dc) # Define as cores manualmente para as raças.

paleta_cores_marvel <- c("#A2238E", "#840E72", "#610052", "#F6821F", "#BA131A", "#8B0305", "#EF403D", "#8B1E1B", "#ED1B24", "#C16617", "#F9A61A", "#C28312", "#FEF200", "#CDBE01", "#968D02")  # Define uma paleta de cores para os tipos de poderes da Marvel Comics.

marvelRaca <- marvelDc %>% # Cria um novo dataframe chamado marvelRaca.
  filter(!is.na(Race)) %>% # Os dados são filtrados para remover os registros em que o campo Race é NA (não disponível).
  filter(Publisher == "Marvel Comics") %>% # Os dados são filtrados novamente para selecionar apenas os personagens da Marvel Comics, com base na coluna Publisher que deve ser igual a "Marvel Comics".
  group_by(Race) %>% # Os dados são agrupados pela raça (Race).
  dplyr::count(Race) %>% # A função count do pacote dplyr é aplicada para contar a ocorrência de cada raça.
  select(Race, Contagem = n) %>% # A coluna n resultante da contagem é renomeada para Contagem utilizando a função select para melhorar a legibilidade.
  arrange(-Contagem) # Os dados são ordenados em ordem decrescente de contagem usando a função arrange.
marvelRaca <- ggplot(marvelRaca[1:15, ], aes(x = reorder(Race, Contagem), y = Contagem)) + # Cria o objeto básico do gráfico usando o dataframe marvelRaca contendo as 15 raças mais recorrentes da Marvel Comics. O eixo x representa o nome dos personagens, com a ordem determinada pela contagem, e o eixo y representa a escala de recorrência. 
  geom_bar(stat = "identity", aes(fill = Race)) + # Adiciona as barras ao gráfico, onde a altura das barras é determinada pela porcentagem da raça. A cor de preenchimento das barras é definida com base na editora (Publisher).
  geom_label(stat = "identity", aes(label = Contagem), size = 7) + # Adiciona rótulos nas barras, mostrando a contagem de personagens correspondentes.
  labs(x = NULL, y = "Quantidade de personagens", title = "Raças dos personagens da Marvel", subtitle= "Top 15 raças") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y, adiciona título e subtítulo ao gráfico.
  coord_flip() + # Inverte o eixo x com o eixo y.
  guides(fill = FALSE, alpha = FALSE) + # As legendas de preenchimento e transparência são desativadas.
  theme_bw() +  # Define o tema do gráfico como um fundo branco.
  theme(plot.title = element_text(hjust = 0.5, size = 45, face = "bold"), # Realiza modifições no título.
        plot.subtitle = element_text(size = 35), # Realiza modifições no subtítulo.
        axis.title = element_text(hjust = 0.5, size = 35, face = "bold"), # Realiza modificações nos eixos.
        axis.text.y = element_text(angle = 0, size = 35, face = "bold"), # Realica modificações em cada raça.
        axis.text.x = element_text(angle = 0, hjust = 0.5, size = 35, face = "bold")) + # Realiza modificações nos valores do eixo x.
  scale_fill_manual(values = paleta_cores_marvel) # Define as cores manualmente para as raças.
grid.arrange(DCRaca, marvelRaca, ncol = 2) # Exibe os dois gráficos lado a lado.

Tipos de poderes dos personagens

Nessa análise, fizemos os top 15 tipos de poderes que aparecem em cada editora, em que novamente separamos uma paleta de cores frias para a DC e uma paleta de cores quentes para a Marvel, desta forma conseguimos obter as maiores tendências de habilidades presentes nos personagens. Nela, observamos que em ambas as editoras, o poder mais recorrente é a super força, sendo que a stamina (capacidade de energia) e a super velocidade também se destacam.

paleta_cores_dc <- c("#5B2D90", "#491D74", "#340556", "#20409A", "#0A195C", "#0065B5", "#00508F", "#02376B", "#02B9BD", "#01A9AC", "#02888B", "#01A55E", "#006535", "#73BF43", "#3C7025") # Define uma paleta de cores para os tipos de poderes da DC Comics.

DCSuperPower <- marvelDc %>% # Cria um novo dataframe chamado DCSuperPower.
  filter(!is.na(SuperPower)) %>% # Os dados são filtrados para remover os registros em que o campo Race é NA (não disponível).
  filter(Publisher == "DC Comics") %>% # Os dados são filtrados para incluir apenas os personagens da DC Comics que possuem informações sobre seus poderes. 
  group_by(SuperPower) %>% # Os dados são agrupados pelo Super Poder (SuperPower).
  dplyr::count(SuperPower) %>% # A função count do pacote dplyr é aplicada para contar a ocorrência de cada Super Poder.
  select(SuperPower, Contagem = n) %>% # A coluna n resultante da contagem é renomeada para Contagem utilizando a função select para melhorar a legibilidade.
  arrange(-Contagem) # Os dados são ordenados em ordem decrescente de contagem usando a função arrange. 

total_dc <- sum(DCSuperPower$Contagem) # O total de personagens da DC Comics é calculado somando as contagens de cada tipo de poder.

DCSuperPower <- DCSuperPower %>% 
  mutate(Porcentagem = Contagem / total_dc * 100) # É adicionada uma nova coluna chamada "Porcentagem" aos dados, que representa a porcentagem de cada tipo de poder em relação ao total de personagens da DC Comics.

DCSuperPower <- ggplot(DCSuperPower[1:15, ], aes(x = reorder(SuperPower, Contagem), y = Contagem)) + # É criado um objeto ggplot utilizando os dados filtrados e apenas os 15 primeiros tipos de poder. O eixo x é configurado com reorder(SuperPower, Contagem) para ordenar as barras de acordo com a contagem de cada tipo de poder.
  geom_bar(stat = "identity", aes(fill = SuperPower)) + # Adiciona as barras ao gráfico, com a altura das barras representando a contagem de cada tipo de poder. A cor de preenchimento das barras é definida pela coluna "SuperPower".
  geom_label(stat = "identity", aes(label = paste0(Contagem, "  (", round(Porcentagem, 1), "%)")), size = 7) + #  Adiciona rótulos aos topos das barras, exibindo a contagem e a porcentagem de cada tipo de poder. Os rótulos são criados a partir das colunas "Contagem" e "Porcentagem"
  labs(x = NULL, y = "Quantidade de personagens", title = "Poderes da DC", subtitle= "Top 15 tipos de poderes") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y, adiciona título e subtítulo ao gráfico.
  coord_flip() + # Inverte o eixo x com o eixo y.
  guides(fill = FALSE, alpha = FALSE) + # As legendas de preenchimento e transparência são desativadas.
  theme_bw() + # Define o tema do gráfico como um fundo branco.
  theme(plot.title = element_text(hjust = 0.5, size = 45, face = "bold"), # Realiza modifições no título.
        plot.subtitle = element_text(size = 35), # Realiza modifições no subtítulo.
        axis.title = element_text(hjust = 0.5, size = 35, face = "bold"), # Realiza modificações nos eixos.
        axis.text.y = element_text(angle = 0, size = 30, face = "bold"),  # Realica modificações em cada Super Poder.
        axis.text.x = element_text(angle = 0, hjust = 0.5, size = 35, face = "bold")) + # Realiza modificações nos valores do eixo x.
  scale_fill_manual(values = paleta_cores_dc) # Define as cores manualmente para os Super Poderes.


paleta_cores_marvel <- c("#A2238E", "#840E72", "#610052", "#F6821F", "#BA131A", "#8B0305", "#EF403D", "#8B1E1B", "#ED1B24", "#C16617", "#F9A61A", "#C28312", "#FEF200", "#CDBE01", "#968D02") # Define uma paleta de cores para os tipos de poderes da Marvel Comics.

marvelSuperPower <- marvelDc %>% # Cria um novo dataframe chamado marvelSuperPower.
  filter(!is.na(SuperPower)) %>% # Os dados são filtrados para remover os registros em que o campo Race é NA (não disponível).
  filter(Publisher == "Marvel Comics") %>% # Os dados são filtrados para incluir apenas os personagens da Marvel Comics que possuem informações sobre seus poderes. 
  group_by(SuperPower) %>% # Os dados são agrupados pelo Super Poder (SuperPower).
  dplyr::count(SuperPower) %>% # A função count do pacote dplyr é aplicada para contar a ocorrência de cada Super Poder.
  select(SuperPower, Contagem = n) %>% # A coluna n resultante da contagem é renomeada para Contagem utilizando a função select para melhorar a legibilidade.
  arrange(-Contagem) # Os dados são ordenados em ordem decrescente de contagem usando a função arrange. 

total_marvel <- sum(marvelSuperPower$Contagem) # O total de personagens da Marvel Comics é calculado somando as contagens de cada tipo de poder.

marvelSuperPower <- marvelSuperPower %>% 
  mutate(Porcentagem = Contagem / total_marvel * 100) # É adicionada uma nova coluna chamada "Porcentagem" aos dados, que representa a porcentagem de cada tipo de poder em relação ao total de personagens da Marvel Comics.

marvelSuperPower <- ggplot(marvelSuperPower[1:15, ], aes(x = reorder(SuperPower, Contagem), y = Contagem)) + # É criado um objeto ggplot utilizando os dados filtrados e apenas os 15 primeiros tipos de poder. O eixo x é configurado com reorder(SuperPower, Contagem) para ordenar as barras de acordo com a contagem de cada tipo de poder.
  geom_bar(stat = "identity", aes(fill = SuperPower)) + # Adiciona as barras ao gráfico, com a altura das barras representando a contagem de cada tipo de poder. A cor de preenchimento das barras é definida pela coluna "SuperPower".
  geom_label(stat = "identity", aes(label = paste0(Contagem, "  (", round(Porcentagem, 1), "%)")), size = 7) + #  Adiciona rótulos aos topos das barras, exibindo a contagem e a porcentagem de cada tipo de poder. Os rótulos são criados a partir das colunas "Contagem" e "Porcentagem"
  labs(x = NULL, y = "Quantidade de personagens", title = "Poderes da Marvel", subtitle= "Top 15 tipos de poderes") + # Retira o rótulo do eixo x, modifica o rótulo do eixo y, adiciona título e subtítulo ao gráfico.
  coord_flip() + # Inverte o eixo x com o eixo y.
  guides(fill = FALSE, alpha = FALSE) + # As legendas de preenchimento e transparência são desativadas.
  theme_bw() + # Define o tema do gráfico como um fundo branco.
  theme(plot.title = element_text(hjust = 0.5, size = 45, face = "bold"), # Realiza modifições no título.
        plot.subtitle = element_text(size = 35), # Realiza modifições no subtítulo.
        axis.title = element_text(hjust = 0.5, size = 35, face = "bold"), # Realiza modificações nos eixos.
        axis.text.y = element_text(angle = 0, size = 30, face = "bold"), # Realica modificações em cada Super Poder.
        axis.text.x = element_text(angle = 0, hjust = 0.5, size = 35, face = "bold")) + # Realiza modificações nos valores do eixo x.
  scale_fill_manual(values = paleta_cores_marvel) # Define as cores manualmente para os Super Poderes.
grid.arrange(DCSuperPower, marvelSuperPower, ncol = 2) # Exibe os dois gráficos lado a lado.

Medidas de Resumo

Para calcular as medidas de resumo de cada editora, foi necessário separar a tabela marvelDc em duas novas tabelas, uma tabela que contém apenas os dados da DC chamada tabela_dc e uma tabela que contém apenas os dados da Marvel chamada tabela_marvel.

tabela_dc <- marvelDc[marvelDc$Publisher == "DC Comics", ]
tabela_marvel <- marvelDc[marvelDc$Publisher == "Marvel Comics", ]

Média

Para calcular a média das variáveis quantitativas de cada editora foi utilizado a função mean(), em que nela foi atribuido a tabela específica de cada editora e a coluna específica de cada variável.

media_inteligencia_dc <- mean(tabela_dc$Intelligence)
media_forca_dc <- mean(tabela_dc$Strength)
media_velocidade_dc <- mean(tabela_dc$Speed)
media_durabilidade_dc <- mean(tabela_dc$Durability)
media_poder_dc <- mean(tabela_dc$Power)
media_combate_dc <- mean(tabela_dc$Combat)

Portanto, temos as seguintes médias para a DC:

Média de inteligência = 62.7099567

Média de força = 50.5995671

Média de velocidade = 46.1760462

Média de durabilidade = 64.6341991

Média de poder = 65.9502165

Média de combate = 57.3556999

media_inteligencia_marvel <- mean(tabela_marvel$Intelligence)
media_forca_marvel <- mean(tabela_marvel$Strength)
media_velocidade_marvel <- mean(tabela_marvel$Speed)
media_durabilidade_marvel <- mean(tabela_marvel$Durability)
media_poder_marvel <- mean(tabela_marvel$Power)
media_combate_marvel <- mean(tabela_marvel$Combat)

Portanto, temos as seguintes médias para a Marvel:

Média de inteligência = 60.6602891

Média de força = 47.1296769

Média de velocidade = 39.2767857

Média de durabilidade = 63.2767857

Média de poder = 59.0008503

Média de combate = 58.6373299

Mediana

Para calcular a mediana das variáveis quantitativas de cada editora foi utilizado a função median(), em que nela foi atribuido a tabela específica de cada editora e a coluna específica de cada variável.

mediana_inteligencia_dc <- median(tabela_dc$Intelligence)
mediana_forca_dc <- median(tabela_dc$Strength)
mediana_velocidade_dc <- median(tabela_dc$Speed)
mediana_durabilidade_dc <- median(tabela_dc$Durability)
mediana_poder_dc <- median(tabela_dc$Power)
mediana_combate_dc <- median(tabela_dc$Combat)

Contudo, temos as seguintes medianas para a DC:

Mediana de inteligência = 75

Mediana de força = 48

Mediana de velocidade = 38

Mediana de durabilidade = 80

Mediana de poder = 72

Mediana de combate = 60

mediana_inteligencia_marvel <- median(tabela_marvel$Intelligence)
mediana_forca_marvel <- median(tabela_marvel$Strength)
mediana_velocidade_marvel <- median(tabela_marvel$Speed)
mediana_durabilidade_marvel <- median(tabela_marvel$Durability)
mediana_poder_marvel <- median(tabela_marvel$Power)
mediana_combate_marvel <- median(tabela_marvel$Combat)

Contudo, temos as seguintes medianas para a Marvel:

Mediana de inteligência = 63

Mediana de força = 48

Mediana de velocidade = 35

Mediana de durabilidade = 70

Mediana de poder = 62

Mediana de combate = 64

Quartis

Para calcular os quartis das variáveis quantitativas de cada editora foi utilizado a função quantile(), em que nela foi atribuido a tabela específica de cada editora e a coluna específica de cada variável. Além disso, foi especificado pelo parâmetro probs = c() os tipos de quartis necessários, no caso o quartil 1, quartil 2 e o quartil 3.

quartis_inteligencia_dc <- quantile(tabela_dc$Intelligence, probs = c(0.25, 0.5, 0.75))
quartis_forca_dc <- quantile(tabela_dc$Strength, probs = c(0.25, 0.5, 0.75))
quartis_velocidade_dc <- quantile(tabela_dc$Speed, probs = c(0.25, 0.5, 0.75))
quartis_durabilidade_dc <- quantile(tabela_dc$Durability, probs = c(0.25, 0.5, 0.75))
quartis_poder_dc <- quantile(tabela_dc$Power, probs = c(0.25, 0.5, 0.75))
quartis_combate_dc <- quantile(tabela_dc$Combat, probs = c(0.25, 0.5, 0.75))

Assim, temos os seguintes quartis para a DC:

Quartis(1,2,3) de inteligência = 50, 75, 88

Quartis(1,2,3) de força = 10, 48, 93

Quartis(1,2,3) de velocidade = 23, 38, 67

Quartis(1,2,3) de durabilidade = 28, 80, 100

Quartis(1,2,3) de poder = 37, 72, 100

Quartis(1,2,3) de combate = 40, 60, 85

quartis_inteligencia_marvel <- quantile(tabela_marvel$Intelligence, probs = c(0.25, 0.5, 0.75))
quartis_forca_marvel <- quantile(tabela_marvel$Strength, probs = c(0.25, 0.5, 0.75))
quartis_velocidade_marvel <- quantile(tabela_marvel$Speed, probs = c(0.25, 0.5, 0.75))
quartis_durabilidade_marvel <- quantile(tabela_marvel$Durability, probs = c(0.25, 0.5, 0.75))
quartis_poder_marvel <- quantile(tabela_marvel$Power, probs = c(0.25, 0.5, 0.75))
quartis_combate_marvel <- quantile(tabela_marvel$Combat, probs = c(0.25, 0.5, 0.75))

Assim, temos os seguintes quartis para a Marvel:

Quartis(1,2,3) de inteligência = 50, 63, 88

Quartis(1,2,3) de força = 12, 48, 80

Quartis(1,2,3) de velocidade = 23, 35, 58

Quartis(1,2,3) de durabilidade = 40, 70, 95

Quartis(1,2,3) de poder = 33, 62, 93

Quartis(1,2,3) de combate = 42, 64, 80

Desvio Padrão

Para calcular o desvio padrão das variáveis quantitativas de cada editora foi utilizado a função sd(), em que nela foi atribuido a tabela específica de cada editora e a coluna específica de cada variável.

desviopad_inteligencia_dc <- sd(tabela_dc$Intelligence)
desviopad_forca_dc <- sd(tabela_dc$Strength)
desviopad_velocidade_dc <- sd(tabela_dc$Speed)
desviopad_durabilidade_dc <- sd(tabela_dc$Durability)
desviopad_poder_dc <- sd(tabela_dc$Power)
desviopad_combate_dc <- sd(tabela_dc$Combat)

Portanto, temos os seguintes desvios padrões para a DC:

Desvio Padrão de inteligência = 30.9474855

Desvio Padrão de força = 38.923314

Desvio Padrão de velocidade = 32.7134926

Desvio Padrão de durabilidade = 36.7366621

Desvio Padrão de poder = 34.5740409

Desvio Padrão de combate = 30.3085652

desviopad_inteligencia_marvel <- sd(tabela_marvel$Intelligence)
desviopad_forca_marvel <- sd(tabela_marvel$Strength)
desviopad_velocidade_marvel <- sd(tabela_marvel$Speed)
desviopad_durabilidade_marvel <- sd(tabela_marvel$Durability)
desviopad_poder_marvel <- sd(tabela_marvel$Power)
desviopad_combate_marvel <- sd(tabela_marvel$Combat)

Portanto, temos os seguintes desvios padrões para a Marvel:

Desvio Padrão de inteligência = 28.0998067

Desvio Padrão de força = 34.139401

Desvio Padrão de velocidade = 24.5932181

Desvio Padrão de durabilidade = 33.8837355

Desvio Padrão de poder = 33.1095265

Desvio Padrão de combate = 27.7330628

Variância

Para calcular a variância das variáveis quantitativas de cada editora foi mais fácil, já que podemos encontrar seu valor após elevar o valor do desvio padrão ao quadrado.

variancia_inteligencia_dc <- desviopad_inteligencia_dc ** 2
variancia_forca_dc <- desviopad_forca_dc ** 2
variancia_velocidade_dc <- desviopad_velocidade_dc ** 2
variancia_durabilidade_dc <- desviopad_durabilidade_dc ** 2
variancia_poder_dc <- desviopad_poder_dc ** 2
variancia_combate_dc <- desviopad_combate_dc ** 2

Assim temos as seguintes variâncias para a DC:

Variância de inteligência = 957.7468611

Variância de força = 1515.0243753

Variância de velocidade = 1070.1725955

Variância de durabilidade = 1349.5823386

Variância de poder = 1195.3643068

Variância de combate = 918.6091263

variancia_inteligencia_marvel <- desviopad_inteligencia_marvel ** 2
variancia_forca_marvel <- desviopad_forca_marvel ** 2
variancia_velocidade_marvel <- desviopad_velocidade_marvel ** 2
variancia_durabilidade_marvel <- desviopad_durabilidade_marvel ** 2
variancia_poder_marvel <- desviopad_poder_marvel ** 2
variancia_combate_marvel <- desviopad_combate_marvel ** 2

Assim, temos as seguintes variâncias para a Marvel:

Variância de inteligência = 789.599137

Variância de força = 1165.4987021

Variância de velocidade = 604.8263771

Variância de durabilidade = 1148.107534

Variância de poder = 1096.2407479

Variância de combate = 769.1227743

Desvio Médio

Para calcular o desvio médio das variáveis quantitativas de cada editora foi utilizado a função mad(), em que nela foi atribuido a tabela específica de cada editora e a coluna específica de cada variável.

desviomed_inteligencia_dc <- mad(tabela_dc$Intelligence)
desviomed_forca_dc <- mad(tabela_dc$Strength)
desviomed_velocidade_dc <- mad(tabela_dc$Speed)
desviomed_durabilidade_dc <- mad(tabela_dc$Durability)
desviomed_poder_dc <- mad(tabela_dc$Power)
desviomed_combate_dc <- mad(tabela_dc$Combat)

Contudo, temos os seguintes desvios médios para a DC:

Desvio Médio de inteligência = 28.1694

Desvio Médio de força = 56.3388

Desvio Médio de velocidade = 29.652

Desvio Médio de durabilidade = 29.652

Desvio Médio de poder = 41.5128

Desvio Médio de combate = 37.065

desviomed_inteligencia_marvel <- mad(tabela_marvel$Intelligence)
desviomed_forca_marvel <- mad(tabela_marvel$Strength)
desviomed_velocidade_marvel <- mad(tabela_marvel$Speed)
desviomed_durabilidade_marvel <- mad(tabela_marvel$Durability)
desviomed_poder_marvel <- mad(tabela_marvel$Power)
desviomed_combate_marvel <- mad(tabela_marvel$Combat)

Contudo, temos os seguintes desvios médios para a Marvel:

Desvio Médio de inteligência = 19.2738

Desvio Médio de força = 51.891

Desvio Médio de velocidade = 17.7912

Desvio Médio de durabilidade = 41.5128

Desvio Médio de poder = 44.478

Desvio Médio de combate = 23.7216

Moda

Para calcular a moda das variáveis categóricas de cada editora, foram necessárias três funções. A função table() foi utilizada para contar a frequência de cada ocorrência nas colunas, a função which.max() foi usada para pegar a maior frequência, enquanto a função names() teve o papel de retornar apenas o nome dessa frequência específica.

frequencia_SuperPower_dc <- table(tabela_dc$SuperPower)
moda_SuperPower_dc <- names(frequencia_SuperPower_dc)[which.max(frequencia_SuperPower_dc)]

frequencia_Gender_dc <- table(tabela_dc$Gender)
moda_Gender_dc <- names(frequencia_Gender_dc)[which.max(frequencia_Gender_dc)]

frequencia_Race_dc <- table(tabela_dc$Race)
moda_Race_dc <- names(frequencia_Race_dc)[which.max(frequencia_Race_dc)]

frequencia_Alignment_dc <- table(tabela_dc$Alignment)
moda_Alignment_dc <- names(frequencia_Alignment_dc)[which.max(frequencia_Alignment_dc)]

Logo, temos as seguintes modas para a DC:

Moda de super poder = Super.Strength

Moda de gênero = Male

Moda de raça = Human

Moda de alinhamento = good

frequencia_SuperPower_marvel <- table(tabela_marvel$SuperPower)
moda_SuperPower_marvel <- names(frequencia_SuperPower_marvel)[which.max(frequencia_SuperPower_marvel)]

frequencia_Gender_marvel <- table(tabela_marvel$Gender)
moda_Gender_marvel <- names(frequencia_Gender_marvel)[which.max(frequencia_Gender_marvel)]

frequencia_Race_marvel <- table(tabela_marvel$Race)
moda_Race_marvel <- names(frequencia_Race_marvel)[which.max(frequencia_Race_marvel)]

frequencia_Alignment_marvel <- table(tabela_marvel$Alignment)
moda_Alignment_marvel <- names(frequencia_Alignment_marvel)[which.max(frequencia_Alignment_marvel)]

Logo, temos as seguintes modas para a Marvel:

Moda de super poder = Super.Strength

Moda de gênero = Male

Moda de raça = Human

Moda de alinhamento = good

Por fim, podemos analisar a moda de editoras da nossa base de dados:

Para fazer essa análise, basta calcular a frequência de cada editora na coluna Publisher através da função table(), depois verificar qual das ocorrências tiveram a maior frequência com a função which.max() e por fim utilizar a função names() para retornar apenas o nome da editora com a maior quantidade de ocorrências.

frequencia_Publisher <- table(marvelDc$Publisher)
moda_Publisher <- names(frequencia_Publisher)[which.max(frequencia_Publisher)]

Moda de editora = Marvel Comics

PARTE C

Qualidade expressiva da peça de comunicação

A peça busca remeter a ideia de estar presente em um quadrinho, ao mesmo tempo que busca mostrar uma dualidade entre os dois universos tratados. Assim, a peça possui fundamento nos estilos das HQ’s.

Público-alvo

O trabalho se trata do universo das Histórias em Quadrinhos. Dessa forma, tem como objetivo instigar o grupo de cultura geek, em sua maioria, que possui interesse sobre a discussão DC vs Marvel.

Rascunho da Peça

Para a criação da ideia inicial, foi feito um breve rascunho da peça, nele está contido a esquematização do trabalho. A invenção da peça gráfica busca ser o mais fiel possível de Historías em Quadrinhos de heróis. Além disso, foi utilizado um PDF de um HQ antigo do Hulk para servir de inspiração e obtenção das paletas de cores.

Rascunho da Peça Gráfica

HQ de inspiração

Definição das ferramentas

Para a confecção da Peça Gráfica, foram utilizadas as seguintes ferramentas:

  • Adobe Color: Para captação de paletas de cores harmonicas;

  • HQ’s Antigos: Para simular e inspirar a criação da peça gráfica, além de orientar na tomada de decisão das paletas de cores;

  • RStudio: Para a criação dos gráficos base da peça, com o objetivo de comparar as duas editoras;

  • Imagens da Internet: Utilizadas para a decoração da peça gráfica;

  • Canva: Ferramenta mais utilizada no projeto, serviu para a criação de todo o Design da peça gráfica, utilizando de conceitos básicos de sistema de camadas de figuras e junção de todos os elementos artísticos e comparativos presentas no trabalho.

PARTE D

Batalhas Mortais

Para construir os gráficos que comparam os atributos de cada um dos personagens, foi necessário criar um data frame chamado dados que contém as informações dos atributos de ambos os competidores. Em seguida, foram calculadas as porcentagens de cada atributo em relação à soma total desse atributo, ou seja, dados$inteligencia_percent recebe a porcentagem de inteligência dividida pela soma total de inteligência em dados, multiplicada por 100, desta forma podemos medir a proporção entre as habilidades de cada personagem e assim diferenciá-los. Depois, para cada atributo foram criados gráficos separados usando a função geom_bar(), onde cada gráfico foi representado pela porcentagem do atributo do persoagem em relação a sua editora. Dessa mesma forma, foram feitos os outros gráficos de atributos, sendo que em cada um dos gráficos foi escolhido a cor azul para representar a DC Comics e a cor vermelha para representar a Marvel Comics. Por fim, foi utilizado a função grid.arrange() para juntar todos os gráficos e assim poder realizar a comparação entre os guerreiros.

Além disso, cada barra do gráfico está comparando um atributo diferente dos personagens, elas foram ordenadas do limite superior ao limite inferior da seguinte forma: Inteligência; Força; Velocidade; Durabilidade; Poder; Combate. OBS: Na Peça Gráfica foram colocadas legendas através do Canva, para diferenciar as comparações.

Batman X Homem de Ferro

dados <- data.frame(editora = c("Marvel", "DC"), 
                    inteligencia = c(100, 100),
                    forca = c(18, 85),
                    velocidade = c(27, 58),
                    durabilidade = c(42, 85),
                    poder = c(37, 100),
                    combate = c(100, 64))

dados$inteligencia_percent <- (dados$inteligencia / sum(dados$inteligencia)) * 100
int <-  ggplot(data = dados, mapping = aes(x = 1, y = inteligencia_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$forca_percent <- (dados$forca / sum(dados$forca)) * 100
forc <-  ggplot(data = dados, mapping = aes(x = 1, y = forca_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$velocidade_percent <- (dados$velocidade / sum(dados$velocidade)) * 100
vel <-  ggplot(data = dados, mapping = aes(x = 1, y = velocidade_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$durabilidade_percent <- (dados$durabilidade / sum(dados$durabilidade)) * 100
dur <-  ggplot(data = dados, mapping = aes(x = 1, y = durabilidade_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$poder_percent <- (dados$poder / sum(dados$poder)) * 100
pod <-  ggplot(data = dados, mapping = aes(x = 1, y = poder_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$combate_percent <- (dados$combate / sum(dados$combate)) * 100
comb <-  ggplot(data = dados, mapping = aes(x = 1, y = combate_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

grid.arrange(int, forc, vel, dur, pod, comb, ncol = 1)

Darkseid X Thanos

dados <- data.frame(editora = c("Marvel", "DC"), 
                    inteligencia = c(88, 88),
                    forca = c(100, 100),
                    velocidade = c(23, 17),
                    durabilidade = c(100, 100),
                    poder = c(100, 100),
                    combate = c(95, 80))

dados$inteligencia_percent <- (dados$inteligencia / sum(dados$inteligencia)) * 100
int <-  ggplot(data = dados, mapping = aes(x = 1, y = inteligencia_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$forca_percent <- (dados$forca / sum(dados$forca)) * 100
forc <-  ggplot(data = dados, mapping = aes(x = 1, y = forca_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$velocidade_percent <- (dados$velocidade / sum(dados$velocidade)) * 100
vel <-  ggplot(data = dados, mapping = aes(x = 1, y = velocidade_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$durabilidade_percent <- (dados$durabilidade / sum(dados$durabilidade)) * 100
dur <-  ggplot(data = dados, mapping = aes(x = 1, y = durabilidade_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$poder_percent <- (dados$poder / sum(dados$poder)) * 100
pod <-  ggplot(data = dados, mapping = aes(x = 1, y = poder_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$combate_percent <- (dados$combate / sum(dados$combate)) * 100
comb <-  ggplot(data = dados, mapping = aes(x = 1, y = combate_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

grid.arrange(int, forc, vel, dur, pod, comb, ncol = 1)

Superman X Hulk

dados <- data.frame(editora = c("Marvel", "DC"), 
                    inteligencia = c(100, 88),
                    forca = c(100, 100),
                    velocidade = c(100, 47),
                    durabilidade = c(100, 100),
                    poder = c(94, 41),
                    combate = c(85, 85))

dados$inteligencia_percent <- (dados$inteligencia / sum(dados$inteligencia)) * 100
int <-  ggplot(data = dados, mapping = aes(x = 1, y = inteligencia_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$forca_percent <- (dados$forca / sum(dados$forca)) * 100
forc <-  ggplot(data = dados, mapping = aes(x = 1, y = forca_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$velocidade_percent <- (dados$velocidade / sum(dados$velocidade)) * 100
vel <-  ggplot(data = dados, mapping = aes(x = 1, y = velocidade_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$durabilidade_percent <- (dados$durabilidade / sum(dados$durabilidade)) * 100
dur <-  ggplot(data = dados, mapping = aes(x = 1, y = durabilidade_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$poder_percent <- (dados$poder / sum(dados$poder)) * 100
pod <-  ggplot(data = dados, mapping = aes(x = 1, y = poder_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$combate_percent <- (dados$combate / sum(dados$combate)) * 100
comb <-  ggplot(data = dados, mapping = aes(x = 1, y = combate_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

grid.arrange(int, forc, vel, dur, pod, comb, ncol = 1)

Mulher-Maravilha X Feiticeira Escarlate

dados <- data.frame(editora = c("Marvel", "DC"), 
                    inteligencia = c(88, 88),
                    forca = c(100, 10),
                    velocidade = c(50, 23),
                    durabilidade = c(100, 42),
                    poder = c(42, 67),
                    combate = c(100, 28))

dados$inteligencia_percent <- (dados$inteligencia / sum(dados$inteligencia)) * 100
int <-  ggplot(data = dados, mapping = aes(x = 1, y = inteligencia_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$forca_percent <- (dados$forca / sum(dados$forca)) * 100
forc <-  ggplot(data = dados, mapping = aes(x = 1, y = forca_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$velocidade_percent <- (dados$velocidade / sum(dados$velocidade)) * 100
vel <-  ggplot(data = dados, mapping = aes(x = 1, y = velocidade_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$durabilidade_percent <- (dados$durabilidade / sum(dados$durabilidade)) * 100
dur <-  ggplot(data = dados, mapping = aes(x = 1, y = durabilidade_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$poder_percent <- (dados$poder / sum(dados$poder)) * 100
pod <-  ggplot(data = dados, mapping = aes(x = 1, y = poder_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$combate_percent <- (dados$combate / sum(dados$combate)) * 100
comb <-  ggplot(data = dados, mapping = aes(x = 1, y = combate_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

grid.arrange(int, forc, vel, dur, pod, comb, ncol = 1)

Arqueiro Verde X Gavião Arqueiro

dados <- data.frame(editora = c("Marvel", "DC"), 
                    inteligencia = c(75, 50),
                    forca = c(12, 12),
                    velocidade = c(35, 23),
                    durabilidade = c(28, 14),
                    poder = c(26, 26),
                    combate = c(90, 80))

dados$inteligencia_percent <- (dados$inteligencia / sum(dados$inteligencia)) * 100
int <-  ggplot(data = dados, mapping = aes(x = 1, y = inteligencia_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$forca_percent <- (dados$forca / sum(dados$forca)) * 100
forc <-  ggplot(data = dados, mapping = aes(x = 1, y = forca_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$velocidade_percent <- (dados$velocidade / sum(dados$velocidade)) * 100
vel <-  ggplot(data = dados, mapping = aes(x = 1, y = velocidade_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$durabilidade_percent <- (dados$durabilidade / sum(dados$durabilidade)) * 100
dur <-  ggplot(data = dados, mapping = aes(x = 1, y = durabilidade_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$poder_percent <- (dados$poder / sum(dados$poder)) * 100
pod <-  ggplot(data = dados, mapping = aes(x = 1, y = poder_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$combate_percent <- (dados$combate / sum(dados$combate)) * 100
comb <-  ggplot(data = dados, mapping = aes(x = 1, y = combate_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

grid.arrange(int, forc, vel, dur, pod, comb, ncol = 1)

Marvel X DC

Obs: Os dados foram obtidos à partir da média de cada atributo por editora.

dados <- data.frame(editora = c("Marvel", "DC"), 
                    inteligencia = c(62.70, 60.66),
                    forca = c(50.59, 47.12),
                    velocidade = c(46.17, 39.27),
                    durabilidade = c(64.63, 63.27),
                    poder = c(65.95, 59),
                    combate = c(57.35, 58.63))

dados$inteligencia_percent <- (dados$inteligencia / sum(dados$inteligencia)) * 100
int <-  ggplot(data = dados, mapping = aes(x = 1, y = inteligencia_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$forca_percent <- (dados$forca / sum(dados$forca)) * 100
forc <-  ggplot(data = dados, mapping = aes(x = 1, y = forca_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$velocidade_percent <- (dados$velocidade / sum(dados$velocidade)) * 100
vel <-  ggplot(data = dados, mapping = aes(x = 1, y = velocidade_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$durabilidade_percent <- (dados$durabilidade / sum(dados$durabilidade)) * 100
dur <-  ggplot(data = dados, mapping = aes(x = 1, y = durabilidade_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$poder_percent <- (dados$poder / sum(dados$poder)) * 100
pod <-  ggplot(data = dados, mapping = aes(x = 1, y = poder_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

dados$combate_percent <- (dados$combate / sum(dados$combate)) * 100
comb <-  ggplot(data = dados, mapping = aes(x = 1, y = combate_percent, fill = editora)) +
    geom_bar(stat = "identity", color = "black") +
    coord_flip() +
    theme_void() +
    guides(fill = "none") +
    scale_fill_manual(values = c("#EC1D23", "#0378F2"))

grid.arrange(int, forc, vel, dur, pod, comb, ncol = 1)

Resultado Final da Peça Gráfica

A peça gráfica realizada a partir dos gráficos acima está disponível em:
https://github.com/KaikyBraga/DC-Comics-vs-Marvel/blob/main/BATALHA%20MORTAL.pdf